package org.liang.job.beans;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;

/**
 * 任务实体 .
 * 
 * <pre>
 * <strong>new Job()的时候 仅需设定一下属性：
 *   title, biz, group, crons, args</strong>
 * 提供 单一键值参数 添加：addArgs(key, value)
 * 提供 单一触发器 添加 ：addCron(cron, groupId)
 * 
 * </pre>
 * 
 * @author L.Yang
 * @version 1.0, 2015年9月23日
 */
public class Job extends JobInfo {

    /** 任务触发器. */
    private List<Cron> crons;

    /** 参数 集合 . */
    private Map<String, Object> args;

    /**
     * 获取任务触发时间.
     * 
     * @return the crons
     */
    public List<Cron> getCrons() {
        return crons;
    }

    /**
     * 设置任务触发时间.
     * 
     * @param crons
     *            the crons to set
     */
    public void setCrons(List<Cron> crons) {
        this.crons = crons;
    }

    /**
     * 添加 定时器.
     * 
     * @param cron
     *            定时器字符串
     * @param groupId
     *            定时器分组编号
     */
    public void addCron(String cron, String groupId) {
        crons = CollectionUtils.isEmpty(crons)
                        ? new ArrayList<Cron>() : crons;
        crons.add(new Cron(cron, groupId));
    }

    /**
     * 获取任务参数.
     * 
     * @return the args
     */
    public Map<String, Object> getArgs() {
        return args;
    }

    /**
     * 设置任务参数.
     * 
     * @param args
     *            the args to set
     */
    public void setArgs(Map<String, Object> args) {
        this.args = args;
    }

    /**
     * 添加任务参数.<br>
     * 如果键值重复则会进行覆盖
     * 
     * @param key
     *            参数键值
     * @param value
     *            参数值
     */
    public void addArgs(String key, Object value) {
        args = MapUtils.isEmpty(args)
                        ? new HashMap<String, Object>() : args;
        args.put(key, value);
    }
}
